home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib16.dsk / VISICALC SORTER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  3KB  |  75 lines

  1. 30  REM  **********************
  2. 40  REM  *      VC  SORT      *
  3. 50  REM  * BY COLIN C. GRAHAM *
  4. 60  REM  * COPYRIGHT (C) 1983 *
  5. 70  REM  * BY MICROSPARC, INC *
  6. 80  REM  * LINCOLN, MA. 01773 *
  7. 90  REM  **********************
  8. 100  REM  PROGRAM TO SORT VISICALC FILE ROWS
  9. 110  REM  BY COLIN GRAHAM
  10. 120  REM  THIS VERSION SORTS ALPHABETICALLY
  11. 130  REM  TO SORT NUMERICALLY, SIMPLY OMIT THE $-SIGN ON THE ARRAY A( )
  12. 140  REM  THAT REQUIRES 4 CHANGES IN 3 LINES!!
  13. 150  REM  INITIALIZE
  14. 160  DIM A$(200),B%(200): REM  A$( HOLDS PART TO BE SORTED, B%( THE RESULTING SORT VECTORS. INTEGER VLBS RO REDUCE SPACE NEEDS
  15. 170  TEXT : HOME 
  16. 180 D$ =  CHR$(4):ESC$ =  CHR$(27)
  17. 190  PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": VTAB 3: PRINT "VISICALC FILE SORTER"
  18. 200  PRINT "BY COLIN C. GRAHAM"
  19. 210  PRINT "MAY 1983"
  20. 220  PRINT 
  21. 230  PRINT "ENTER SOURCE FILE NAME (VC P-TO-DISK):"
  22. 240  INPUT INNAME$
  23. 250  PRINT "IS ";INNAME$;" OK?"
  24. 260  GET A$: IF A$ < >"Y"  THEN 230
  25. 270  PRINT : PRINT "ENTER OUTFILE NAME:"
  26. 280  INPUT FILE$
  27. 290  PRINT "IS ";FILE$;" OK?"
  28. 300  GET A$: IF A$ < >"Y"  THEN 270
  29. 310  PRINT : PRINT "WHICH COLUMN IS BEING SORTED?"
  30. 320  INPUT COL$
  31. 330  PRINT "IS ";COL$;" OK?"
  32. 340  GET A$: IF A$ < >"Y"  THEN 310
  33. 350  PRINT : PRINT "ENTER NUMBER OF FIRST ROW WRITTEN TO": PRINT "FILE (0-200)"
  34. 360  INPUT R1
  35. 370  PRINT "IS ";R1;" OK?"
  36. 380  GET A$: IF A$ < >"Y"  THEN 350
  37. 390  REM  OPEN SOURCE FILE & CHECK PARAMETERS
  38. 400  PRINT D$;"OPEN ";INNAME$
  39. 410  PRINT D$;"READ ";INNAME$
  40. 420  ONERR  GOTO 460
  41. 430 J = 1
  42. 440  INPUT A$(J):J = J +1
  43. 450  GOTO 440
  44. 460  IF  PEEK(222) < >5  THEN  PRINT "ERROR "; PEEK(222);" OCCURRED.": END 
  45. 470  POKE 216,0: REM  TURN OFF ONERR GOTO
  46. 480  REM  IF NOT END OF DATA, ABORT WITH ERROR NUMBER
  47. 490 NENTRIES = J -1
  48. 500 R1 = R1 -1:R2 = R1
  49. 510  REM  PREPARE TO SORT
  50. 520  FOR J = 1 TO NENTRIES:B%(J) = J: NEXT J
  51. 530  PRINT D$;"CLOSE ";INNAME$
  52. 540  PRINT "SORTING";
  53. 550  REM  BUBBLE SORT - SLOW BUT EASY TO WRITE
  54. 560  FOR I = 2 TO NENTRIES
  55. 570  REM  DON'T NEED TO PUT AT FRONT FOR SPEED. THAT'S ONLY IMPORTANT WHEN USING GOTOS.
  56. 580  PRINT ".";
  57. 590  FOR J = NENTRIES TO I  STEP  -1
  58. 600  IF A$(B%(J -1)) >A$(B%(J))  THEN TEMP = B%(J -1):B%(J -1) = B%(J):B%(J) = TEMP
  59. 610  NEXT J: NEXT I
  60. 620  PRINT : PRINT D$;"OPEN ";FILE$
  61. 630  PRINT D$;"WRITE ";FILE$
  62. 640  REM  WRITE OUT THE /MOVE COMMANDS
  63. 650  REM  THE ESC COMMAND IN LINE 310 TELLS VISICALC NOT TO MOVE THE CURRENT
  64. 660  REM  LINE BUT TO MOVE THE LINE WHOSE # FOLLOWS
  65. 670  FOR J = 1 TO NENTRIES
  66. 680  PRINT "/M";ESC$;COL$;B%(J) +R1;".";COL$;J +R2
  67. 690  FOR I = 1 TO NENTRIES: IF B%(I) <B%(J)  THEN B%(I) = B%(I) +1
  68. 700  NEXT I
  69. 710  NEXT J
  70. 720  PRINT  CHR$(7); CHR$(7); CHR$(7); CHR$(0); CHR$(0): REM  SET UP TO RING THE BELL IN VISICALC. THE NULS ENSURE THAT VISICALC'S DOS WON'T READ BEYOND THE END OF YOUR FILE.
  71. 730  PRINT D$;"CLOSE ";FILE$
  72. 740  REM  WAKE UP OPERATOR
  73. 750  FOR J = 1 TO 50:I =  PEEK( -16336) + PEEK( -16336) + PEEK( -16336): NEXT J
  74. 760  PRINT  CHR$(7); CHR$(7)
  75. 770  END